@@ -3,7 +3,7 @@  | 
            ||
| 3 | 3 | 
                archiveVersion = 1;  | 
            
| 4 | 4 | 
                 	classes = {
               | 
            
| 5 | 5 | 
                };  | 
            
| 6 | 
                - objectVersion = 46;  | 
            |
| 6 | 
                + objectVersion = 51;  | 
            |
| 7 | 7 | 
                 	objects = {
               | 
            
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                /* Begin PBXBuildFile section */  | 
            
                @@ -38,6 +38,7 @@  | 
            ||
| 38 | 38 | 
                 		050D719B22531B860076CE06 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719A22531B860076CE06 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
               | 
            
| 39 | 39 | 
                 		050D719D22531BA60076CE06 /* SQLite.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 050D719C22531BA60076CE06 /* SQLite.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
               | 
            
| 40 | 40 | 
                 		050D719E22531BBF0076CE06 /* Differentiator.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 05130FBD21CA194B004EF1BE /* Differentiator.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
               | 
            
| 41 | 
                +		050D71A322545D550076CE06 /* NavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 050D71A222545D550076CE06 /* NavigationController.swift */; };
               | 
            |
| 41 | 42 | 
                 		05130F4021C94B33004EF1BE /* PaiaiUIKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 05130F3021C94B32004EF1BE /* PaiaiUIKit.h */; settings = {ATTRIBUTES = (Public, ); }; };
               | 
            
| 42 | 43 | 
                 		05130F5721C94C12004EF1BE /* AlertAnimator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F4F21C94C12004EF1BE /* AlertAnimator.swift */; };
               | 
            
| 43 | 44 | 
                 		05130F5921C94C12004EF1BE /* AlertViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05130F5121C94C12004EF1BE /* AlertViewController.swift */; };
               | 
            
                @@ -147,10 +148,7 @@  | 
            ||
| 147 | 148 | 
                 		0513106721CA290B004EF1BE /* DateExt.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0543274721C68C1900C6388D /* DateExt.swift */; };
               | 
            
| 148 | 149 | 
                 		0513106921CA34D6004EF1BE /* GroupDetailCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */; };
               | 
            
| 149 | 150 | 
                 		0513106B21CA3545004EF1BE /* PhotoDetailCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */; };
               | 
            
| 150 | 
                -		0513107D21CA3907004EF1BE /* CancelAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513106F21CA3907004EF1BE /* CancelAlertAction.swift */; };
               | 
            |
| 151 | 
                -		0513107F21CA3907004EF1BE /* DestructiveAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107121CA3907004EF1BE /* DestructiveAlertAction.swift */; };
               | 
            |
| 152 | 151 | 
                 		0513108021CA3907004EF1BE /* ActionSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107221CA3907004EF1BE /* ActionSheetView.swift */; };
               | 
            
| 153 | 
                -		0513108121CA3907004EF1BE /* ConfirmAlertAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513107321CA3907004EF1BE /* ConfirmAlertAction.swift */; };
               | 
            |
| 154 | 152 | 
                 		0513109321CA3915004EF1BE /* ColorQR.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513108A21CA3914004EF1BE /* ColorQR.swift */; };
               | 
            
| 155 | 153 | 
                 		0513109421CA3915004EF1BE /* QRCodeMaskView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513108B21CA3914004EF1BE /* QRCodeMaskView.swift */; };
               | 
            
| 156 | 154 | 
                 		0513109521CA3915004EF1BE /* QRCodeScanDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0513108C21CA3914004EF1BE /* QRCodeScanDelegate.swift */; };
               | 
            
                @@ -347,6 +345,7 @@  | 
            ||
| 347 | 345 | 
                 		050D719822531B780076CE06 /* RxCocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxCocoa.framework; path = Carthage/Build/iOS/RxCocoa.framework; sourceTree = "<group>"; };
               | 
            
| 348 | 346 | 
                 		050D719A22531B860076CE06 /* RxSwift.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = RxSwift.framework; path = Carthage/Build/iOS/RxSwift.framework; sourceTree = "<group>"; };
               | 
            
| 349 | 347 | 
                 		050D719C22531BA60076CE06 /* SQLite.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SQLite.framework; path = Carthage/Build/iOS/SQLite.framework; sourceTree = "<group>"; };
               | 
            
| 348 | 
                +		050D71A222545D550076CE06 /* NavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationController.swift; sourceTree = "<group>"; };
               | 
            |
| 350 | 349 | 
                 		050E210F21B8CE8A008E1352 /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = "<group>"; };
               | 
            
| 351 | 350 | 
                 		050E211121B8F2D4008E1352 /* HomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinator.swift; sourceTree = "<group>"; };
               | 
            
| 352 | 351 | 
                 		050E211321B8F39C008E1352 /* MineCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MineCoordinator.swift; sourceTree = "<group>"; };
               | 
            
                @@ -389,10 +388,7 @@  | 
            ||
| 389 | 388 | 
                 		0513106121CA22B5004EF1BE /* Alamofire.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Alamofire.framework; path = Carthage/Build/iOS/Alamofire.framework; sourceTree = "<group>"; };
               | 
            
| 390 | 389 | 
                 		0513106821CA34D6004EF1BE /* GroupDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GroupDetailCoordinator.swift; sourceTree = "<group>"; };
               | 
            
| 391 | 390 | 
                 		0513106A21CA3545004EF1BE /* PhotoDetailCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoDetailCoordinator.swift; sourceTree = "<group>"; };
               | 
            
| 392 | 
                -		0513106F21CA3907004EF1BE /* CancelAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CancelAlertAction.swift; sourceTree = "<group>"; };
               | 
            |
| 393 | 
                -		0513107121CA3907004EF1BE /* DestructiveAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DestructiveAlertAction.swift; sourceTree = "<group>"; };
               | 
            |
| 394 | 391 | 
                 		0513107221CA3907004EF1BE /* ActionSheetView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActionSheetView.swift; sourceTree = "<group>"; };
               | 
            
| 395 | 
                -		0513107321CA3907004EF1BE /* ConfirmAlertAction.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfirmAlertAction.swift; sourceTree = "<group>"; };
               | 
            |
| 396 | 392 | 
                 		0513108A21CA3914004EF1BE /* ColorQR.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ColorQR.swift; sourceTree = "<group>"; };
               | 
            
| 397 | 393 | 
                 		0513108B21CA3914004EF1BE /* QRCodeMaskView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeMaskView.swift; sourceTree = "<group>"; };
               | 
            
| 398 | 394 | 
                 		0513108C21CA3914004EF1BE /* QRCodeScanDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRCodeScanDelegate.swift; sourceTree = "<group>"; };
               | 
            
                @@ -649,6 +645,14 @@  | 
            ||
| 649 | 645 | 
                path = Animationes;  | 
            
| 650 | 646 | 
                sourceTree = "<group>";  | 
            
| 651 | 647 | 
                };  | 
            
| 648 | 
                +		050D71A122545CE20076CE06 /* NavigationController */ = {
               | 
            |
| 649 | 
                + isa = PBXGroup;  | 
            |
| 650 | 
                + children = (  | 
            |
| 651 | 
                + 050D71A222545D550076CE06 /* NavigationController.swift */,  | 
            |
| 652 | 
                + );  | 
            |
| 653 | 
                + path = NavigationController;  | 
            |
| 654 | 
                + sourceTree = "<group>";  | 
            |
| 655 | 
                + };  | 
            |
| 652 | 656 | 
                 		05130F2F21C94B32004EF1BE /* PaiaiUIKit */ = {
               | 
            
| 653 | 657 | 
                isa = PBXGroup;  | 
            
| 654 | 658 | 
                children = (  | 
            
                @@ -675,6 +679,7 @@  | 
            ||
| 675 | 679 | 
                 		05130F4D21C94B72004EF1BE /* UIKit */ = {
               | 
            
| 676 | 680 | 
                isa = PBXGroup;  | 
            
| 677 | 681 | 
                children = (  | 
            
| 682 | 
                + 050D71A122545CE20076CE06 /* NavigationController */,  | 
            |
| 678 | 683 | 
                055BB53F220AEA4E009548AA /* Nibless */,  | 
            
| 679 | 684 | 
                0584FD7A21FABA0300FA1E3E /* Present */,  | 
            
| 680 | 685 | 
                05C8D21E21EDD5A80001E847 /* NavigationBar */,  | 
            
                @@ -1058,9 +1063,6 @@  | 
            ||
| 1058 | 1063 | 
                057317A321F5C6C0009B2FCE /* BottomCancelItem.swift */,  | 
            
| 1059 | 1064 | 
                059B58A721F83B1600FA64C2 /* CenterCancelItem.swift */,  | 
            
| 1060 | 1065 | 
                059B58A921F83B2E00FA64C2 /* CenterConfirmItem.swift */,  | 
            
| 1061 | 
                - 0513106F21CA3907004EF1BE /* CancelAlertAction.swift */,  | 
            |
| 1062 | 
                - 0513107121CA3907004EF1BE /* DestructiveAlertAction.swift */,  | 
            |
| 1063 | 
                - 0513107321CA3907004EF1BE /* ConfirmAlertAction.swift */,  | 
            |
| 1064 | 1066 | 
                );  | 
            
| 1065 | 1067 | 
                path = AlertAction;  | 
            
| 1066 | 1068 | 
                sourceTree = "<group>";  | 
            
                @@ -1294,6 +1296,7 @@  | 
            ||
| 1294 | 1296 | 
                7737858CEE753530C312F2CB /* Frameworks */,  | 
            
| 1295 | 1297 | 
                );  | 
            
| 1296 | 1298 | 
                sourceTree = "<group>";  | 
            
| 1299 | 
                + usesTabs = 0;  | 
            |
| 1297 | 1300 | 
                };  | 
            
| 1298 | 1301 | 
                 		6CEBD1001CA8D680004DBDE0 /* Products */ = {
               | 
            
| 1299 | 1302 | 
                isa = PBXGroup;  | 
            
                @@ -1484,7 +1487,7 @@  | 
            ||
| 1484 | 1487 | 
                 			attributes = {
               | 
            
| 1485 | 1488 | 
                LastSwiftUpdateCheck = 1010;  | 
            
| 1486 | 1489 | 
                LastUpgradeCheck = 1020;  | 
            
| 1487 | 
                - ORGANIZATIONNAME = yb;  | 
            |
| 1490 | 
                + ORGANIZATIONNAME = FFIB;  | 
            |
| 1488 | 1491 | 
                 				TargetAttributes = {
               | 
            
| 1489 | 1492 | 
                 					05130F2D21C94B32004EF1BE = {
               | 
            
| 1490 | 1493 | 
                CreatedOnToolsVersion = 10.1;  | 
            
                @@ -1524,7 +1527,7 @@  | 
            ||
| 1524 | 1527 | 
                };  | 
            
| 1525 | 1528 | 
                };  | 
            
| 1526 | 1529 | 
                buildConfigurationList = 6CEBD0FA1CA8D680004DBDE0 /* Build configuration list for PBXProject "Paiai" */;  | 
            
| 1527 | 
                - compatibilityVersion = "Xcode 3.2";  | 
            |
| 1530 | 
                + compatibilityVersion = "Xcode 10.0";  | 
            |
| 1528 | 1531 | 
                developmentRegion = en;  | 
            
| 1529 | 1532 | 
                hasScannedForEncodings = 0;  | 
            
| 1530 | 1533 | 
                knownRegions = (  | 
            
                @@ -1627,7 +1630,6 @@  | 
            ||
| 1627 | 1630 | 
                05C8D21D21EDD3770001E847 /* NavigationBarInteractivePopDeletegate.swift in Sources */,  | 
            
| 1628 | 1631 | 
                05C8D22421EED92F0001E847 /* NavigationBarPushAndPopDelegate.swift in Sources */,  | 
            
| 1629 | 1632 | 
                05130FFD21CA1B39004EF1BE /* HardwareAuthorization.swift in Sources */,  | 
            
| 1630 | 
                - 0513107D21CA3907004EF1BE /* CancelAlertAction.swift in Sources */,  | 
            |
| 1631 | 1633 | 
                05130FFE21CA1B39004EF1BE /* WaterfallFlowLayout.swift in Sources */,  | 
            
| 1632 | 1634 | 
                05130FFF21CA1B39004EF1BE /* WaterfallFlowConfiguration.swift in Sources */,  | 
            
| 1633 | 1635 | 
                055BB53E220AEA3B009548AA /* NiblessViewController.swift in Sources */,  | 
            
                @@ -1639,12 +1641,10 @@  | 
            ||
| 1639 | 1641 | 
                0513100121CA1B39004EF1BE /* CGPointExt.swift in Sources */,  | 
            
| 1640 | 1642 | 
                0584FD7521F9C70D00FA1E3E /* SideAnimator.swift in Sources */,  | 
            
| 1641 | 1643 | 
                0584FD7721F9C8A300FA1E3E /* PresentAnimatorDelegate.swift in Sources */,  | 
            
| 1642 | 
                - 0513107F21CA3907004EF1BE /* DestructiveAlertAction.swift in Sources */,  | 
            |
| 1643 | 1644 | 
                059B589F21F7103100FA64C2 /* AlertItem.swift in Sources */,  | 
            
| 1644 | 1645 | 
                059B58A621F7235D00FA64C2 /* AlertAction.swift in Sources */,  | 
            
| 1645 | 1646 | 
                0513109821CA3915004EF1BE /* QRCodeScanResult.swift in Sources */,  | 
            
| 1646 | 1647 | 
                0513100221CA1B39004EF1BE /* CGSizeExt.swift in Sources */,  | 
            
| 1647 | 
                - 0513108121CA3907004EF1BE /* ConfirmAlertAction.swift in Sources */,  | 
            |
| 1648 | 1648 | 
                05C8D22221EED6860001E847 /* NavigationBarInteractiveViewController.swift in Sources */,  | 
            
| 1649 | 1649 | 
                0513109A21CA3915004EF1BE /* QRCodeScanView.swift in Sources */,  | 
            
| 1650 | 1650 | 
                0513100721CA1B39004EF1BE /* UIViewController+UIBarButtonItem.swift in Sources */,  | 
            
                @@ -1671,6 +1671,7 @@  | 
            ||
| 1671 | 1671 | 
                0513101921CA1B39004EF1BE /* UIImageExt.swift in Sources */,  | 
            
| 1672 | 1672 | 
                05C8D22921EF0A9F0001E847 /* NavigationControllerProxy.swift in Sources */,  | 
            
| 1673 | 1673 | 
                05D3A3D02200288400A29A20 /* Storyboarded.swift in Sources */,  | 
            
| 1674 | 
                + 050D71A322545D550076CE06 /* NavigationController.swift in Sources */,  | 
            |
| 1674 | 1675 | 
                05C0CEFB21F85A7700993DE2 /* ActionSheetController.swift in Sources */,  | 
            
| 1675 | 1676 | 
                05C8D21421ED8B9B0001E847 /* NavigationBackViewController.swift in Sources */,  | 
            
| 1676 | 1677 | 
                0584FD7C21FABC1400FA1E3E /* PresentExtension.swift in Sources */,  | 
            
                @@ -1937,7 +1938,11 @@  | 
            ||
| 1937 | 1938 | 
                INFOPLIST_FILE = PaiaiUIKit/Info.plist;  | 
            
| 1938 | 1939 | 
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";  | 
            
| 1939 | 1940 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 1940 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";  | 
            |
| 1941 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 1942 | 
                + "$(inherited)",  | 
            |
| 1943 | 
                + "@executable_path/Frameworks",  | 
            |
| 1944 | 
                + "@loader_path/Frameworks",  | 
            |
| 1945 | 
                + );  | 
            |
| 1941 | 1946 | 
                MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;  | 
            
| 1942 | 1947 | 
                MTL_FAST_MATH = YES;  | 
            
| 1943 | 1948 | 
                PRODUCT_BUNDLE_IDENTIFIER = FFIB.PaiaiUIKit;  | 
            
                @@ -1973,7 +1978,11 @@  | 
            ||
| 1973 | 1978 | 
                INFOPLIST_FILE = PaiaiUIKit/Info.plist;  | 
            
| 1974 | 1979 | 
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";  | 
            
| 1975 | 1980 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 1976 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";  | 
            |
| 1981 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 1982 | 
                + "$(inherited)",  | 
            |
| 1983 | 
                + "@executable_path/Frameworks",  | 
            |
| 1984 | 
                + "@loader_path/Frameworks",  | 
            |
| 1985 | 
                + );  | 
            |
| 1977 | 1986 | 
                MTL_FAST_MATH = YES;  | 
            
| 1978 | 1987 | 
                PRODUCT_BUNDLE_IDENTIFIER = FFIB.PaiaiUIKit;  | 
            
| 1979 | 1988 | 
                PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";  | 
            
                @@ -2013,7 +2022,11 @@  | 
            ||
| 2013 | 2022 | 
                INFOPLIST_FILE = PaiaiDataKit/Info.plist;  | 
            
| 2014 | 2023 | 
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";  | 
            
| 2015 | 2024 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 2016 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";  | 
            |
| 2025 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 2026 | 
                + "$(inherited)",  | 
            |
| 2027 | 
                + "@executable_path/Frameworks",  | 
            |
| 2028 | 
                + "@loader_path/Frameworks",  | 
            |
| 2029 | 
                + );  | 
            |
| 2017 | 2030 | 
                LIBRARY_SEARCH_PATHS = (  | 
            
| 2018 | 2031 | 
                "$(inherited)",  | 
            
| 2019 | 2032 | 
                "$(PROJECT_DIR)/Paiai/wxSDK",  | 
            
                @@ -2062,7 +2075,11 @@  | 
            ||
| 2062 | 2075 | 
                INFOPLIST_FILE = PaiaiDataKit/Info.plist;  | 
            
| 2063 | 2076 | 
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";  | 
            
| 2064 | 2077 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 2065 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";  | 
            |
| 2078 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 2079 | 
                + "$(inherited)",  | 
            |
| 2080 | 
                + "@executable_path/Frameworks",  | 
            |
| 2081 | 
                + "@loader_path/Frameworks",  | 
            |
| 2082 | 
                + );  | 
            |
| 2066 | 2083 | 
                LIBRARY_SEARCH_PATHS = (  | 
            
| 2067 | 2084 | 
                "$(inherited)",  | 
            
| 2068 | 2085 | 
                "$(PROJECT_DIR)/Paiai/wxSDK",  | 
            
                @@ -2104,7 +2121,11 @@  | 
            ||
| 2104 | 2121 | 
                INFOPLIST_FILE = Paiai_iOS/Info.plist;  | 
            
| 2105 | 2122 | 
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";  | 
            
| 2106 | 2123 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 2107 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";  | 
            |
| 2124 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 2125 | 
                + "$(inherited)",  | 
            |
| 2126 | 
                + "@executable_path/Frameworks",  | 
            |
| 2127 | 
                + "@loader_path/Frameworks",  | 
            |
| 2128 | 
                + );  | 
            |
| 2108 | 2129 | 
                MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;  | 
            
| 2109 | 2130 | 
                MTL_FAST_MATH = YES;  | 
            
| 2110 | 2131 | 
                PRODUCT_BUNDLE_IDENTIFIER = "com.Paiai-iOS";  | 
            
                @@ -2144,7 +2165,11 @@  | 
            ||
| 2144 | 2165 | 
                INFOPLIST_FILE = Paiai_iOS/Info.plist;  | 
            
| 2145 | 2166 | 
                INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";  | 
            
| 2146 | 2167 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 2147 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";  | 
            |
| 2168 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 2169 | 
                + "$(inherited)",  | 
            |
| 2170 | 
                + "@executable_path/Frameworks",  | 
            |
| 2171 | 
                + "@loader_path/Frameworks",  | 
            |
| 2172 | 
                + );  | 
            |
| 2148 | 2173 | 
                MTL_FAST_MATH = YES;  | 
            
| 2149 | 2174 | 
                PRODUCT_BUNDLE_IDENTIFIER = "com.Paiai-iOS";  | 
            
| 2150 | 2175 | 
                PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";  | 
            
                @@ -2267,7 +2292,8 @@  | 
            ||
| 2267 | 2292 | 
                "-all_load",  | 
            
| 2268 | 2293 | 
                );  | 
            
| 2269 | 2294 | 
                SDKROOT = iphoneos;  | 
            
| 2270 | 
                - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";  | 
            |
| 2295 | 
                + SWIFT_COMPILATION_MODE = wholemodule;  | 
            |
| 2296 | 
                + SWIFT_OPTIMIZATION_LEVEL = "-O";  | 
            |
| 2271 | 2297 | 
                VALIDATE_PRODUCT = YES;  | 
            
| 2272 | 2298 | 
                };  | 
            
| 2273 | 2299 | 
                name = Release;  | 
            
                @@ -2301,7 +2327,10 @@  | 
            ||
| 2301 | 2327 | 
                );  | 
            
| 2302 | 2328 | 
                INFOPLIST_FILE = PaiAi/Info.plist;  | 
            
| 2303 | 2329 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 2304 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";  | 
            |
| 2330 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 2331 | 
                + "$(inherited)",  | 
            |
| 2332 | 
                + "@executable_path/Frameworks",  | 
            |
| 2333 | 
                + );  | 
            |
| 2305 | 2334 | 
                LIBRARY_SEARCH_PATHS = (  | 
            
| 2306 | 2335 | 
                "$(inherited)",  | 
            
| 2307 | 2336 | 
                "$(PROJECT_DIR)/Paiai/wxSDK",  | 
            
                @@ -2348,7 +2377,10 @@  | 
            ||
| 2348 | 2377 | 
                );  | 
            
| 2349 | 2378 | 
                INFOPLIST_FILE = PaiAi/Info.plist;  | 
            
| 2350 | 2379 | 
                IPHONEOS_DEPLOYMENT_TARGET = 10.0;  | 
            
| 2351 | 
                - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";  | 
            |
| 2380 | 
                + LD_RUNPATH_SEARCH_PATHS = (  | 
            |
| 2381 | 
                + "$(inherited)",  | 
            |
| 2382 | 
                + "@executable_path/Frameworks",  | 
            |
| 2383 | 
                + );  | 
            |
| 2352 | 2384 | 
                LIBRARY_SEARCH_PATHS = (  | 
            
| 2353 | 2385 | 
                "$(inherited)",  | 
            
| 2354 | 2386 | 
                "$(PROJECT_DIR)/Paiai/wxSDK",  | 
            
                @@ -34,6 +34,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate, WXApiDelegate {
               | 
            ||
| 34 | 34 | 
                let rootViewController = ContainerViewController()  | 
            
| 35 | 35 | 
                let nav = UINavigationController(rootViewController: rootViewController)  | 
            
| 36 | 36 | 
                 | 
            
| 37 | 
                + rootViewController.setupNavigationBarPushAndPopDelegate()  | 
            |
| 37 | 38 | 
                window = UIWindow(frame: UIScreen.main.bounds)  | 
            
| 38 | 39 | 
                window?.rootViewController = nav  | 
            
| 39 | 40 | 
                window?.makeKeyAndVisible()  | 
            
                @@ -25,6 +25,8 @@  | 
            ||
| 25 | 25 | 
                <dict>  | 
            
| 26 | 26 | 
                <key>CFBundleTypeRole</key>  | 
            
| 27 | 27 | 
                <string>Editor</string>  | 
            
| 28 | 
                + <key>CFBundleURLName</key>  | 
            |
| 29 | 
                + <string>weixin</string>  | 
            |
| 28 | 30 | 
                <key>CFBundleURLSchemes</key>  | 
            
| 29 | 31 | 
                <array>  | 
            
| 30 | 32 | 
                <string>wx4e22a0c8ae6d766d</string>  | 
            
                @@ -43,6 +45,8 @@  | 
            ||
| 43 | 45 | 
                <dict>  | 
            
| 44 | 46 | 
                <key>CFBundleTypeRole</key>  | 
            
| 45 | 47 | 
                <string>Editor</string>  | 
            
| 48 | 
                + <key>CFBundleURLName</key>  | 
            |
| 49 | 
                + <string>weibo</string>  | 
            |
| 46 | 50 | 
                <key>CFBundleURLSchemes</key>  | 
            
| 47 | 51 | 
                <array>  | 
            
| 48 | 52 | 
                <string>wb2730190333</string>  | 
            
                @@ -74,6 +74,7 @@ class NetworkApi {
               | 
            ||
| 74 | 74 | 
                                         if status == 200 {
               | 
            
| 75 | 75 | 
                observer(.success(data))  | 
            
| 76 | 76 | 
                                         } else {
               | 
            
| 77 | 
                + print(json)  | 
            |
| 77 | 78 | 
                Toast.show(message: (json["description"] as? String) ?? "")  | 
            
| 78 | 79 | 
                observer(.error(BusinessError(id: status)))  | 
            
| 79 | 80 | 
                }  | 
            
                @@ -17,12 +17,12 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
               | 
            ||
| 17 | 17 | 
                     init() {}
               | 
            
| 18 | 18 | 
                 | 
            
| 19 | 19 | 
                     func login() -> Single<UserInfo> {
               | 
            
| 20 | 
                - #if (arch(i386) || arch(x86_64))  | 
            |
| 20 | 
                +// #if (arch(i386) || arch(x86_64))  | 
            |
| 21 | 21 | 
                         return Single.create(subscribe: { (observer) in
               | 
            
| 22 | 22 | 
                observer(.success(UserInfo(json: ["user_id": "fiDz2Ms" as AnyObject, "userName": "郑剑飞" as AnyObject, "photoPath": "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTJibSYLgvXpMakvD9FaCqfiaWqcMiaiaz905YxWPuO4hy8F2lGheV7kVr9vKKXFgmL1S5s4QJgxwuwtVw/132" as AnyObject])))  | 
            
| 23 | 23 | 
                return Disposables.create()  | 
            
| 24 | 24 | 
                })  | 
            
| 25 | 
                - #else  | 
            |
| 25 | 
                +// #else  | 
            |
| 26 | 26 | 
                loginWithWeChat()  | 
            
| 27 | 27 | 
                         return addWXLoginDidFinish().flatMap({
               | 
            
| 28 | 28 | 
                return self.getWXToken(param: $0)  | 
            
                @@ -33,7 +33,7 @@ struct WXUserInfoRemoteAPI: UserInfoRemoteAPI {
               | 
            ||
| 33 | 33 | 
                         }).do(onSuccess: { res in
               | 
            
| 34 | 34 | 
                print(res)  | 
            
| 35 | 35 | 
                })  | 
            
| 36 | 
                - #endif  | 
            |
| 36 | 
                +// #endif  | 
            |
| 37 | 37 | 
                }  | 
            
| 38 | 38 | 
                 | 
            
| 39 | 39 | 
                     fileprivate func loginWithWeChat() {
               | 
            
                @@ -71,9 +71,7 @@ public class UserInfoViewModel {
               | 
            ||
| 71 | 71 | 
                         repository.guestLogin().subscribe(onSuccess: { (userInfo) in
               | 
            
| 72 | 72 | 
                self.shareUserInfo.accept(userInfo)  | 
            
| 73 | 73 | 
                self._loginCompleted.onNext(())  | 
            
| 74 | 
                -        }) { (error) in
               | 
            |
| 75 | 
                -            #warning("错误处理")
               | 
            |
| 76 | 
                - }.disposed(by: disposeBag)  | 
            |
| 74 | 
                + }).disposed(by: disposeBag)  | 
            |
| 77 | 75 | 
                }  | 
            
| 78 | 76 | 
                 | 
            
| 79 | 77 | 
                     public func wxLogin() {
               | 
            
                @@ -81,10 +79,8 @@ public class UserInfoViewModel {
               | 
            ||
| 81 | 79 | 
                         repository.wxLogin().subscribe(onSuccess: { (userInfo) in
               | 
            
| 82 | 80 | 
                self.shareUserInfo.accept(userInfo)  | 
            
| 83 | 81 | 
                self._loginCompleted.onNext(())  | 
            
| 84 | 
                -        }) { (error) in
               | 
            |
| 85 | 
                - print(error)  | 
            |
| 86 | 
                -            #warning("错误处理")
               | 
            |
| 87 | 
                - }.disposed(by: disposeBag)  | 
            |
| 82 | 
                + Toast.hide()  | 
            |
| 83 | 
                + }).disposed(by: disposeBag)  | 
            |
| 88 | 84 | 
                }  | 
            
| 89 | 85 | 
                 | 
            
| 90 | 86 | 
                     deinit {
               | 
            
                @@ -1,16 +0,0 @@  | 
            ||
| 1 | 
                -//  | 
            |
| 2 | 
                -// CancelAlertAction.swift  | 
            |
| 3 | 
                -// PaiAi  | 
            |
| 4 | 
                -//  | 
            |
| 5 | 
                -// Created by FFIB on 2017/11/20.  | 
            |
| 6 | 
                -// Copyright © 2017年 yb. All rights reserved.  | 
            |
| 7 | 
                -//  | 
            |
| 8 | 
                -  | 
            |
| 9 | 
                -import UIKit  | 
            |
| 10 | 
                -//  | 
            |
| 11 | 
                -//class CancelAlertAction: FFAlertAction {
               | 
            |
| 12 | 
                -//    init() {
               | 
            |
| 13 | 
                -// super.init(attributedTitle: NSAttributedString(string: "取消", attributes: [NSAttributedString.Key.foregroundColor: UIColor(r: 51, g: 51, b: 51)]),  | 
            |
| 14 | 
                -// backgroundColor: UIColor(r: 222, g: 222, b: 222), handler: nil)  | 
            |
| 15 | 
                -// }  | 
            |
| 16 | 
                -//}  | 
            
                @@ -1,16 +0,0 @@  | 
            ||
| 1 | 
                -//  | 
            |
| 2 | 
                -// ConfirmAlertAction.swift  | 
            |
| 3 | 
                -// PaiAi  | 
            |
| 4 | 
                -//  | 
            |
| 5 | 
                -// Created by FFIB on 2017/11/20.  | 
            |
| 6 | 
                -// Copyright © 2017年 yb. All rights reserved.  | 
            |
| 7 | 
                -//  | 
            |
| 8 | 
                -  | 
            |
| 9 | 
                -import UIKit  | 
            |
| 10 | 
                -  | 
            |
| 11 | 
                -//class ConfirmAlertAction: FFAlertAction {
               | 
            |
| 12 | 
                -//    init(title: String = "确定", handler: ((FFAlertAction) -> Void)?) {
               | 
            |
| 13 | 
                -// super.init(attributedTitle: NSAttributedString(string: title, attributes: [NSAttributedString.Key.foregroundColor: UIColor.white]),  | 
            |
| 14 | 
                -// backgroundColor: UIColor(r: 129, g: 209, b: 53), handler: handler)  | 
            |
| 15 | 
                -// }  | 
            |
| 16 | 
                -//}  | 
            
                @@ -1,16 +0,0 @@  | 
            ||
| 1 | 
                -//  | 
            |
| 2 | 
                -// DestructiveAlertAction.swift  | 
            |
| 3 | 
                -// PaiAi  | 
            |
| 4 | 
                -//  | 
            |
| 5 | 
                -// Created by FFIB on 2017/11/20.  | 
            |
| 6 | 
                -// Copyright © 2017年 yb. All rights reserved.  | 
            |
| 7 | 
                -//  | 
            |
| 8 | 
                -  | 
            |
| 9 | 
                -import UIKit  | 
            |
| 10 | 
                -  | 
            |
| 11 | 
                -//class DestructiveAlertAction: FFAlertAction {
               | 
            |
| 12 | 
                -//    init(title: String, handler: ((FFAlertAction) -> Void)?) {
               | 
            |
| 13 | 
                -// super.init(attributedTitle: NSAttributedString(string: title, attributes: [NSAttributedString.Key.foregroundColor: UIColor(r: 248, g: 86, b: 131)]),  | 
            |
| 14 | 
                -// backgroundColor: UIColor.white, handler: handler)  | 
            |
| 15 | 
                -// }  | 
            |
| 16 | 
                -//}  | 
            
                @@ -15,7 +15,7 @@ public extension GestureRecognizerDelegate where Self: UIViewController & Naviga  | 
            ||
| 15 | 15 | 
                gestureRecognizer.isKind(of: UIPanGestureRecognizer.self),  | 
            
| 16 | 16 | 
                             let pan = gestureRecognizer as? UIPanGestureRecognizer {
               | 
            
| 17 | 17 | 
                let point = pan.translation(in: self.view)  | 
            
| 18 | 
                -            if point.x > 30 {
               | 
            |
| 18 | 
                +            if point.x > 0 {
               | 
            |
| 19 | 19 | 
                return true  | 
            
| 20 | 20 | 
                }  | 
            
| 21 | 21 | 
                }  | 
            
                @@ -10,46 +10,59 @@ import UIKit  | 
            ||
| 10 | 10 | 
                 | 
            
| 11 | 11 | 
                 public protocol NavigationBarInOutAnimator: class {
               | 
            
| 12 | 12 | 
                     var navigationView: UIView { get }
               | 
            
| 13 | 
                - func navigationBarFadeIn()  | 
            |
| 14 | 
                - func navigationBarFadeOut()  | 
            |
| 15 | 
                - func navigationBarFadeAndMoveIn()  | 
            |
| 16 | 
                - func navigationBarFadeAndMoveOut()  | 
            |
| 13 | 
                + func navigationBarFadeIn(percentage: CGFloat)  | 
            |
| 14 | 
                + func navigationBarFadeOut(percentage: CGFloat)  | 
            |
| 15 | 
                + func navigationBarFadeAndMoveIn(percentage: CGFloat)  | 
            |
| 16 | 
                + func navigationBarFadeAndMoveOut(percentage: CGFloat)  | 
            |
| 17 | 17 | 
                func navigationBarFadeOutWithPercentage(_ percentage: CGFloat)  | 
            
| 18 | 18 | 
                func navigationBarFadeInWithPercentage(_ percentage: CGFloat)  | 
            
| 19 | 19 | 
                }  | 
            
| 20 | 20 | 
                 | 
            
| 21 | 21 | 
                 public extension NavigationBarInOutAnimator where Self: UIViewController & NavigationBarPushAndPopDelegate {
               | 
            
| 22 | 
                -    func navigationBarFadeIn() {
               | 
            |
| 23 | 
                -        UIView.animate(withDuration: 0.3, animations: {
               | 
            |
| 22 | 
                +    func navigationBarFadeIn(percentage: CGFloat) {
               | 
            |
| 23 | 
                + UIView.animate(withDuration: TimeInterval(0.3 * percentage),  | 
            |
| 24 | 
                +                       animations: {
               | 
            |
| 24 | 25 | 
                self.navigationView.alpha = 1  | 
            
| 25 | 26 | 
                }, completion: nil)  | 
            
| 26 | 27 | 
                }  | 
            
| 27 | 28 | 
                 | 
            
| 28 | 
                -    func navigationBarFadeOut() {
               | 
            |
| 29 | 
                -        UIView.animate(withDuration: 0.3, animations: {
               | 
            |
| 29 | 
                +    func navigationBarFadeOut(percentage: CGFloat) {
               | 
            |
| 30 | 
                + UIView.animate(withDuration: TimeInterval(0.3 * percentage),  | 
            |
| 31 | 
                +                       animations: {
               | 
            |
| 30 | 32 | 
                self.navigationView.alpha = 0  | 
            
| 31 | 33 | 
                }, completion: nil)  | 
            
| 32 | 34 | 
                }  | 
            
| 33 | 35 | 
                 | 
            
| 34 | 
                -    func navigationBarFadeAndMoveIn() {
               | 
            |
| 35 | 
                - setNavigationBar()  | 
            |
| 36 | 
                - navigationController?.navigationBar.layoutIfNeeded()  | 
            |
| 36 | 
                +    func navigationBarFadeAndMoveIn(percentage: CGFloat) {
               | 
            |
| 37 | 
                +// setNavigationBar()  | 
            |
| 38 | 
                +// navigationController?.navigationBar.layoutIfNeeded()  | 
            |
| 37 | 39 | 
                 | 
            
| 38 | 
                - let originX = navigationView.center.x  | 
            |
| 39 | 
                - navigationView.center.x = UIScreen.main.bounds.width  | 
            |
| 40 | 
                +// let originX = navigationView.center.x  | 
            |
| 41 | 
                +// navigationView.center.x = UIScreen.main.bounds.width  | 
            |
| 40 | 42 | 
                 | 
            
| 41 | 
                -        UIView.animate(withDuration: 0.3, animations: {
               | 
            |
| 43 | 
                + UIView.animate(withDuration: TimeInterval(0.3 * percentage),  | 
            |
| 44 | 
                +                       animations: {
               | 
            |
| 42 | 45 | 
                self.navigationView.alpha = 1  | 
            
| 43 | 
                - self.navigationView.center.x = originX  | 
            |
| 44 | 
                - }, completion: nil)  | 
            |
| 46 | 
                + self.navigationView.center.x = UIScreen.main.bounds.width / 2  | 
            |
| 47 | 
                +        }, completion: { flag in
               | 
            |
| 48 | 
                +//            if flag {
               | 
            |
| 49 | 
                + self.setNavigationBar()  | 
            |
| 50 | 
                +// }  | 
            |
| 51 | 
                +            print("move in \(flag)")
               | 
            |
| 52 | 
                + })  | 
            |
| 45 | 53 | 
                }  | 
            
| 46 | 54 | 
                 | 
            
| 47 | 
                -    func navigationBarFadeAndMoveOut() {
               | 
            |
| 48 | 
                -        UIView.animate(withDuration: 0.3, animations: {
               | 
            |
| 55 | 
                +    func navigationBarFadeAndMoveOut(percentage: CGFloat) {
               | 
            |
| 56 | 
                + print(self.navigationView.center)  | 
            |
| 57 | 
                + UIView.animate(withDuration: TimeInterval(0.3 * percentage),  | 
            |
| 58 | 
                +                       animations: {
               | 
            |
| 49 | 59 | 
                self.navigationView.alpha = 0  | 
            
| 50 | 60 | 
                self.navigationView.center.x = UIScreen.main.bounds.width  | 
            
| 51 | 
                -        }, completion: { _ in
               | 
            |
| 52 | 
                - self.navigationView.removeFromSuperview()  | 
            |
| 61 | 
                +        }, completion: { flag in
               | 
            |
| 62 | 
                +//            if flag {
               | 
            |
| 63 | 
                + self.navigationView.removeFromSuperview()  | 
            |
| 64 | 
                +// }  | 
            |
| 65 | 
                +            print("move out \(flag)")
               | 
            |
| 53 | 66 | 
                })  | 
            
| 54 | 67 | 
                }  | 
            
| 55 | 68 | 
                 | 
            
                @@ -29,8 +29,9 @@ extension UIViewController {
               | 
            ||
| 29 | 29 | 
                /// navigationController?.visibleViewController == self pop to viewController  | 
            
| 30 | 30 | 
                 | 
            
| 31 | 31 | 
                let percentageAnimation: ((CGFloat) -> Void)  | 
            
| 32 | 
                - let fadeInAnimation: (() -> Void)  | 
            |
| 33 | 
                - let fadeOutAnimation: (() -> Void)  | 
            |
| 32 | 
                + let fadeInAnimation: ((CGFloat) -> Void)  | 
            |
| 33 | 
                + let fadeOutAnimation: ((CGFloat) -> Void)  | 
            |
| 34 | 
                +  | 
            |
| 34 | 35 | 
                         if navigationController == nil {
               | 
            
| 35 | 36 | 
                percentageAnimation = self.navigationBarFadeOutWithPercentage  | 
            
| 36 | 37 | 
                fadeInAnimation = self.navigationBarFadeAndMoveIn  | 
            
                @@ -49,10 +50,10 @@ extension UIViewController {
               | 
            ||
| 49 | 50 | 
                 | 
            
| 50 | 51 | 
                if (percentage > 0.5 && navigationController == nil) ||  | 
            
| 51 | 52 | 
                             (percentage < 0.5 && navigationController?.visibleViewController == self) {
               | 
            
| 52 | 
                - fadeOutAnimation()  | 
            |
| 53 | 
                + fadeOutAnimation(1 - percentage)  | 
            |
| 53 | 54 | 
                } else if (percentage < 0.5 && navigationController == nil) ||  | 
            
| 54 | 55 | 
                             (percentage > 0.5 && navigationController?.visibleViewController == self) {
               | 
            
| 55 | 
                - fadeInAnimation()  | 
            |
| 56 | 
                + fadeInAnimation(percentage)  | 
            |
| 56 | 57 | 
                }  | 
            
| 57 | 58 | 
                }  | 
            
| 58 | 59 | 
                 | 
            
                @@ -29,11 +29,11 @@ public extension NavigationControllerDelegate where Self: UIViewController {
               | 
            ||
| 29 | 29 | 
                                               to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning? {
               | 
            
| 30 | 30 | 
                 | 
            
| 31 | 31 | 
                         if operation == .push {
               | 
            
| 32 | 
                - (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveIn()  | 
            |
| 33 | 
                - (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeOut()  | 
            |
| 32 | 
                + (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveIn(percentage: 1)  | 
            |
| 33 | 
                + (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeOut(percentage: 1)  | 
            |
| 34 | 34 | 
                         } else {
               | 
            
| 35 | 
                - (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeIn()  | 
            |
| 36 | 
                - (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveOut()  | 
            |
| 35 | 
                + (toVC as? NavigationBarInOutAnimator)?.navigationBarFadeIn(percentage: 1)  | 
            |
| 36 | 
                + (fromVC as? NavigationBarInOutAnimator)?.navigationBarFadeAndMoveOut(percentage: 1)  | 
            |
| 37 | 37 | 
                }  | 
            
| 38 | 38 | 
                 | 
            
| 39 | 39 | 
                return nil  | 
            
                @@ -0,0 +1,29 @@  | 
            ||
| 1 | 
                +//  | 
            |
| 2 | 
                +// NavigationController.swift  | 
            |
| 3 | 
                +// PaiaiUIKit  | 
            |
| 4 | 
                +//  | 
            |
| 5 | 
                +// Created by ffib on 2019/4/3.  | 
            |
| 6 | 
                +// Copyright © 2019 yb. All rights reserved.  | 
            |
| 7 | 
                +//  | 
            |
| 8 | 
                +  | 
            |
| 9 | 
                +import UIKit  | 
            |
| 10 | 
                +  | 
            |
| 11 | 
                +class NavigationController: UINavigationController {
               | 
            |
| 12 | 
                +  | 
            |
| 13 | 
                +}  | 
            |
| 14 | 
                +  | 
            |
| 15 | 
                +//class NavigationController: UINavigationController {
               | 
            |
| 16 | 
                +//  | 
            |
| 17 | 
                +//    override func viewDidLoad() {
               | 
            |
| 18 | 
                +// super.viewDidLoad()  | 
            |
| 19 | 
                +//  | 
            |
| 20 | 
                +// // Do any additional setup after loading the view.  | 
            |
| 21 | 
                +// }  | 
            |
| 22 | 
                +//  | 
            |
| 23 | 
                +// func set  | 
            |
| 24 | 
                +//}  | 
            |
| 25 | 
                +//  | 
            |
| 26 | 
                +//  | 
            |
| 27 | 
                +//extension UIViewController {
               | 
            |
| 28 | 
                +// n  | 
            |
| 29 | 
                +//}  | 
            
                @@ -72,7 +72,6 @@ open class PageViewController: UIViewController {
               | 
            ||
| 72 | 72 | 
                constructViewHierarchy()  | 
            
| 73 | 73 | 
                activateConstraints()  | 
            
| 74 | 74 | 
                setMenuGestureRecognizer()  | 
            
| 75 | 
                - setupNavigationBarPushAndPopDelegate()  | 
            |
| 76 | 75 | 
                setupNavigationBarInteractivePopDelegate()  | 
            
| 77 | 76 | 
                }  | 
            
| 78 | 77 | 
                 | 
            
                @@ -74,6 +74,10 @@ final class GroupViewController: UIViewController {
               | 
            ||
| 74 | 74 | 
                }  | 
            
| 75 | 75 | 
                collectionView.startRefreshing(at: .top)  | 
            
| 76 | 76 | 
                }  | 
            
| 77 | 
                +  | 
            |
| 78 | 
                +    deinit {
               | 
            |
| 79 | 
                + collectionView.endAllRefreshing()  | 
            |
| 80 | 
                + }  | 
            |
| 77 | 81 | 
                }  | 
            
| 78 | 82 | 
                 | 
            
| 79 | 83 | 
                /// UI bindings  | 
            
                @@ -60,6 +60,10 @@ final class HomeViewController: UIViewController {
               | 
            ||
| 60 | 60 | 
                self.viewModel.preload()  | 
            
| 61 | 61 | 
                }  | 
            
| 62 | 62 | 
                }  | 
            
| 63 | 
                +  | 
            |
| 64 | 
                +    deinit {
               | 
            |
| 65 | 
                + collectionView.endAllRefreshing()  | 
            |
| 66 | 
                + }  | 
            |
| 63 | 67 | 
                }  | 
            
| 64 | 68 | 
                 | 
            
| 65 | 69 | 
                /// UI bindings  | 
            
                @@ -88,6 +88,10 @@ final class MessageListViewController: UIViewController {
               | 
            ||
| 88 | 88 | 
                }))  | 
            
| 89 | 89 | 
                presentController(alert)  | 
            
| 90 | 90 | 
                }  | 
            
| 91 | 
                +  | 
            |
| 92 | 
                +    deinit {
               | 
            |
| 93 | 
                + tableView.endAllRefreshing()  | 
            |
| 94 | 
                + }  | 
            |
| 91 | 95 | 
                }  | 
            
| 92 | 96 | 
                 | 
            
| 93 | 97 | 
                 fileprivate extension MessageListViewController {
               | 
            
                @@ -56,6 +56,10 @@ final class MineGroupViewController: UIViewController {
               | 
            ||
| 56 | 56 | 
                self.viewModel.preload()  | 
            
| 57 | 57 | 
                }  | 
            
| 58 | 58 | 
                }  | 
            
| 59 | 
                +  | 
            |
| 60 | 
                +    deinit {
               | 
            |
| 61 | 
                + tableView.endAllRefreshing()  | 
            |
| 62 | 
                + }  | 
            |
| 59 | 63 | 
                }  | 
            
| 60 | 64 | 
                 | 
            
| 61 | 65 | 
                 fileprivate extension MineGroupViewController {
               | 
            
                @@ -53,6 +53,10 @@ final class MineOrderViewController: UIViewController {
               | 
            ||
| 53 | 53 | 
                self.viewModel.preload()  | 
            
| 54 | 54 | 
                }  | 
            
| 55 | 55 | 
                }  | 
            
| 56 | 
                +  | 
            |
| 57 | 
                +    deinit {
               | 
            |
| 58 | 
                + tableView.endAllRefreshing()  | 
            |
| 59 | 
                + }  | 
            |
| 56 | 60 | 
                }  | 
            
| 57 | 61 | 
                 | 
            
| 58 | 62 | 
                /// binding UI  |